package AppSsl

import (
	"encoding/json"
	"fmt"
	"gitee.com/liumou_site/logger"
	"time"
)

// AnalysisCountdown 分析倒计时，判断是否需要申请新的证书。
// 参数:
//
//	jsonData: 包含证书信息的JSON数据字符串。
//	countdown: 倒计天数，用于比较证书的剩余有效时间。
//
// 返回值:
//
//	bool: 如果当前剩余时间小于或等于倒计时天数，返回true，表示需要申请新的证书；否则返回false。
//	error: 如果在处理过程中发生错误，返回该错误。
func AnalysisCountdown(jsonData string, countdown int) (bool, error) {
	// 如果倒计时小于等于3天，则将其重置为7天。
	if countdown <= 3 {
		countdown = 7
	}

	// 初始化一个空的map来存储解析后的JSON数据。
	var data map[string]interface{}

	// 将JSON数据解析到map中。
	err := json.Unmarshal([]byte(jsonData), &data)
	// 如果解析过程中发生错误，打印错误信息并返回空切片。
	if err != nil {
		fmt.Println("Error unmarshaling JSON:", err)
		return false, err
	}

	// 从解析后的数据中提取Certificates列表。
	CertEndTime := data["Response"].(map[string]interface{})["CertEndTime"].(string)
	// 将证书结束时间字符串解析为time.Time类型。
	certEndTime, err := time.Parse(time.DateTime, CertEndTime)
	if err != nil {
		fmt.Println("Error parsing certificate end time:", err)
		return false, err
	}

	// 获取当前时间。
	currentTime := time.Now()

	// 计算证书结束时间和当前时间之间的差异。
	duration := certEndTime.Sub(currentTime)
	// 输出调试信息，包括设置的倒计时天数、证书剩余天数、当前时间和证书结束时间。
	logger.Debug("设置证书剩余时间: ", countdown)
	logger.Debug("证书剩余时间: ", duration.Hours()/24)
	logger.Debug("当前时间: ", currentTime.Format(time.DateTime))
	logger.Debug("证书结束时间: ", certEndTime.Format(time.DateTime))
	// 判断剩余时间是否小于或等于倒计时天数。
	if duration.Hours()/24 <= float64(countdown) {
		// 如果剩余时间小于或等于倒计时天数，输出警告信息并返回true。
		logger.Warn("当前剩余时间小于或等于倒计时天数，需要申请新的证书: ", duration.Hours()/24)
		return true, nil
	}
	// 如果剩余时间大于倒计时天数，输出信息并返回false。
	logger.Info("当前剩余时间大于倒计时天数，不需要申请新的证书: ", duration.Hours())
	return false, nil
}
